Placeholders are a synchronization engine feature that provides a means in situations like when a user wants to synchronize more content than they may have disk space for, when the user wants to allocate space for other things, policy, and so on. Instead of synchronizing an entire file, a small “placeholder” file may be synchronized instead. When the user interacts with the file, the synchronization engine may download (or “hydrate”) the contents to disk just in time. The effect is that the user may see their entire namespace, regardless of disk space, and can interact with their files as normal, as long as they are online. One aspect of placeholders is that there is minimal (if any) application compatibility work, as aside from slow opens and reads, applications are largely unaware that files are hydrated just-in-time.
In an example scenario, an application that is attempting to open a cloud stored file is usually blocked from continuing until the open operation completes. For small files and a fast network connection, the delay may not be noticeable; however, for larger files and/or slower connections the delay may degrade user experience or even result in a crash of the application. The results may not be desirable especially in open operations to just read the file and not to modify.